const { Maybe, Container } = require('./support');
// 练习 1 : 使用fp.add(x, y)和fp.map(f, x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5,6,1]);
// ex1能让所有元素+1
let ex1 = (functor) => {
  return functor.map(x => {
    return fp.map(fp.curry(fp.add(1)), x);
  })
}

//练习 2 : 实现一个函数ex2 , 能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do']);
let ex2 = (functor) => {
  return functor.map(x => {
    return fp.first(x);
  })
}

//练习 3 : 实现一个函数ex3 , 使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function (x, o) {
  return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = () => {
  return safeProp('name')(user).map(x => fp.first(x));
}

// 练习4 : 使用Maybe重写ex4 , 不要有if语句
let ex4 = (n) => {
  return Maybe.of(n).map(x => parseInt(x));
}